#!/usr/bin/python3
# -*- coding:utf-8 -*-
"""
json
更好的方法是序列化为JSON，因为JSON表示出来就是一个字符串，可以被所有语言读取，也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式，并且比XML更快，而且可以直接在Web页面中读取，非常方便。

JSON表示的对象就是标准的JavaScript语言的对象，JSON和Python内置的数据类型对应如下：
JSON类型	  Python类型
{}       	  dict
[]      	  list
"string"      str
1234.56	      int或float
true/false    True/False
null	      None
"""
import json


def json_main():
    d = dict(name='Bob', age=20, score=88)
    # 转化为json文件
    s = json.dumps(d)
    print(s)
    print(isinstance(s, str))  # s就是一个字符串
    with open('dumps.json', 'w') as f:
        json.dump(s, f)
    with open('dumps.json', 'r', encoding='utf-8') as f:
        d = json.load(f)
        print(d)
        print(type(d))   # <class 'str'>
        d = eval(d)
        print(d)
        print(type(d))   # <class 'dict'>
    lis = [{
        'aqi': 20,
        'area': '上海',
        'pm2_5': 14,
        'pm2_5_24h': 14,
        'position_name': '十五厂',
        'primary_pollutant': '颗粒物(PM10)',
        'quality': '优',
        'station_code': '1142 A',
        'time_point': '2017 - 07 - 29 T14: 00: 00 Z'
    }, {
        'aqi': 46,
        'area': '上海',
        'pm2_5': 32,
        'pm2_5_24h': 7,
        'position_name': '虹口',
        'primary_pollutant': '颗粒物(PM10)',
        'quality': '优',
        'station_code': '1143 A',
        'time_point': '2017 - 07 - 29 T14: 00: 00 Z'
    }, {
        'aqi': 30,
        'area': '上海',
        'pm2_5': 19,
        'pm2_5_24h': 16,
        'position_name': '徐汇上师大',
        'primary_pollutant': '颗粒物(PM10)',
        'quality': '优',
        'station_code': '1144 A',
        'time_point': '2017 - 07 - 29 T14: 00: 00 Z'
    }, {
        'aqi': 42,
        'area': '上海',
        'pm2_5': 15,
        'pm2_5_24h': 18,
        'position_name': '杨浦四漂',
        'primary_pollutant': '颗粒物(PM10)',
        'quality': '优',
        'station_code': '1145 A',
        'time_point': '2017 - 07 - 29 T14: 00: 00 Z'
    }, {
        'aqi': 36,
        'area': '上海',
        'pm2_5': 20,
        'pm2_5_24h': 19,
        'position_name': '青浦淀山湖',
        'primary_pollutant': '颗粒物(PM10)',
        'quality': '优',
        'station_code': '1146 A',
        'time_point': '2017 - 07 - 29 T14: 00: 00 Z'
    }, {
        'aqi': 29,
        'area': '上海',
        'pm2_5': 20,
        'pm2_5_24h': 17,
        'position_name': '静安监测站',
        'primary_pollutant': '颗粒物(PM10)',
        'quality': '优',
        'station_code': '1147 A',
        'time_point': '2017 - 07 - 29 T14: 00: 00 Z'
    }, {
        'aqi': 51,
        'area': '上海',
        'pm2_5': 17,
        'pm2_5_24h': 16,
        'position_name': '浦东川沙',
        'primary_pollutant': '颗粒物(PM10)',
        'quality': '良',
        'station_code': '1148 A',
        'time_point': '2017 - 07 - 29 T14: 00: 00 Z'
    }, {
        'aqi': 29,
        'area': '上海',
        'pm2_5': 20,
        'pm2_5_24h': 11,
        'position_name': '浦东新区监测站',
        'primary_pollutant': '颗粒物(PM10)',
        'quality': '优',
        'station_code': '1149 A',
        'time_point': '2017 - 07 - 29 T14: 00: 00 Z'
    }, {
        'aqi': 35,
        'area': '上海',
        'pm2_5': 24,
        'pm2_5_24h': 20,
        'position_name': '浦东张江',
        'primary_pollutant': '颗粒物(PM10)',
        'quality': '优',
        'station_code': '1150 A',
        'time_point': '2017 - 07 - 29 T14: 00: 00 Z'
    }, {
        'aqi': 36,
        'area': '上海',
        'pm2_5': 17,
        'pm2_5_24h': 14,
        'position_name': '普陀',
        'primary_pollutant': '颗粒物(PM10)',
        'quality': '优',
        'station_code': '1141 A',
        'time_point': '2017 - 07 - 29 T14: 00: 00 Z'
    }, {
        'aqi': 34,
        'area': '上海',
        'pm2_5': 19,
        'pm2_5_24h': 15,
        'position_name': 'wangnan',
        'primary_pollutant': '',
        'quality': '优',
        'station_code': '1141 A',
        'time_point': '2017 - 07 - 29 T14: 00: 00 Z'
    }]
    s = json.dumps(lis)
    # print(s)
    print(type(s))    # <class 'str'>
    with open('shanghai.json', 'w') as f:
        json.dump(s, f)
    with open('shanghai.json', 'r', encoding='utf-8') as f:
        li = json.load(f)
        print(li)
        print(type(li))  # <class 'str'>
        li = list(li)
        print(type(li))   # <class 'list'>


if __name__ == "__main__":
    json_main()
